/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloMaterial;
import com.ipartek.formacion.gestformwww.modelo.beans.FiltroMaterial;
import com.ipartek.formacion.gestformwww.modelo.beans.Material;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Curso
 */
public class ListarMaterialAccion implements Accion {
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        // Iniciamos las variables con las que vamos a trabajar
        HttpSession sesion = request.getSession(false);
        AccionRouter router = null;
        FiltroMaterial filtro = null;
        ArrayList materiales = null;
        int numeroMateriales = 0;
        int numPags = 0;
        // Cargamos el mapeo de acciones
        ResourceBundle bundle = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        // Instanciamos la capa de modelo para el acceso a la BBDD
        ModeloMaterial modelo = (ModeloMaterial) servlet.getServletContext().getAttribute("ModeloMaterial");
        // Comprobamos si el usuario existe
        if (sesion.getAttribute("usuario") != null) {
            // Comprobamos si existe filtro
             if (sesion.getAttribute("filtromaterial") != null) {
                 // Si existe, lo cargamos
                  filtro = (FiltroMaterial) sesion.getAttribute("filtromaterial");
            } else {
                // Si no existe, creamos un filtro vacio
                filtro = new FiltroMaterial(bundle);
                //filtro.setBundle(bundle);
            }
            if ((request.getParameter("filtroISBNMaterial")!=null))
                filtro.setISBN(request.getParameter("filtroISBNMaterial"));
            if ((request.getParameter("filtroAutorMaterial")!=null))
                filtro.setLibAutor(request.getParameter("filtroAutorMaterial"));
            if ((request.getParameter("filtroEditorialMaterial")!=null))
                filtro.setLibEditorial(request.getParameter("filtroEditorialMaterial"));
            if ((request.getParameter("filtroTituloMaterial")!=null))
                filtro.setLibTitulo(request.getParameter("filtroTituloMaterial"));
            if ((request.getParameter("filtroOrden")!=null))
                filtro.setOrden(request.getParameter("filtroOrden"));
            if ((request.getParameter("filtroColumna")!=null))
                filtro.setColumnafiltrar(request.getParameter("filtroColumna"));
            if ((request.getParameter("RegistroPagina")!=null))
                filtro.setElementospag(request.getParameter("RegistroPagina"));
            if ((request.getParameter("id")!=null))
                filtro.setPagsiguiente(request.getParameter("id"));

            sesion.setAttribute("filtromaterial", filtro);
           // Recogemos el orden de la consulta
            if (request.getParameter("orden")!=null){
                filtro.setOrden(request.getParameter("orden"));
            }
             // Recogemos el campo por el que se ordenará la consulta
            if (request.getParameter("columna")!=null){
                filtro.setColumnafiltrar(request.getParameter("columna"));
            }
            // Creamos el array de candidatos
            materiales = new ArrayList <Material>();
            try {
                // y cargamos dicho array con la consulta de la BBDD
                materiales = modelo.listarMateriales(filtro);
                // Contamos el numero de candidatos de la consulta
                numeroMateriales = modelo.contarMaterial(filtro);

            } catch (GestorFormacionExcepcion ex) {
                // si ocurre una excepcion, la capturamos
                Logger.getLogger(ListarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                sesion.setAttribute("excepciones", ex.getMessage());
            }
            // Cargamos el array en la variable de peticion
            request.setAttribute("listaMateriales", materiales);
            // Recogemos el numero de paginas de la consulta
            numPags = filtro.getElementospag();

            if (numeroMateriales == 0) {
                ResourceBundle errores = (ResourceBundle) servlet.getServletContext().getAttribute("errores-mapeo");
                request.setAttribute("error", errores.getString("error-sin-resultados"));
            }

            request.setAttribute("numeroMateriales", numeroMateriales);
            int totalpaginas = numeroMateriales / numPags;
            if ((numeroMateriales % numPags) != 0) {
                totalpaginas++;
            }
            request.setAttribute("totalPagMateriales", totalpaginas);

            // Definimos el destino de la peticion
            request.setAttribute("contenido", "listar-material");
            router = new AccionRouter("principal");
        } else {
            // Si no existe el usuario, lo mandamos al inicio de la aplicacion
            router = new AccionRouter("inicio", false);
        }
        // Devolvemos el destino
        return router;
    }
}
